package com.hh.gateway.config;

import org.springframework.cloud.gateway.filter.ratelimit.KeyResolver;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import reactor.core.publisher.Mono;

/**
 * 自定义请求限制的类
 */
@Configuration
public class RequestLimitConfig {
    // 针对某一个接口 ip来限流 /doLogin 每一个ip10s只能访问3次
    @Bean("ipKeyResolver")
    @Primary // 主要的 主候选的
    public KeyResolver ipKeyResolver() {
        // 这个方法的返回值是ip 可以直接使用ip的方式限制 想用什么限制就获取什么
        return exchange -> Mono.just(exchange.getRequest().getHeaders().getHost().getHostString());
    }

    // 针对路径限制 /doLogin
    // api 就是接口 外面一般把gateway 叫api网关 新一代网关
    @Bean // 次候选
    public KeyResolver apiKeyResolver() {
        return exchange -> Mono.just(exchange.getRequest().getPath().value());
    }
}
